33] Phong edges, By Charles Blaquiere.
Remember that Phong shading interpolates the surface normal between the current face and the
neighbouring face, if the connecting edge is not flagged "sharp". An example:
| 0
| 1
| 2
| 3
__| 4
5
When modelling a wine glass, You'd typically have long faces on the sides of the glass,
leading to tiny faces representing the top surface of the rim (obviously, my diagram is upside-down.
Mmmm, let's make our object a glass cover that fits over the cheese tray. Yeah, that's it).
The numbers represent some abstract kind of angle, with 0 representing surface normals that point
to the right, and 5 those that point downwards. You see how the surface normal changes all over the
large face, from 0 to 5, all because of the tiny rim. This causes the "flat areas seem to bulge like
pillows" problem familiar to new 3-D users.
The standard ways to get around this are:
- define the connecting edges as sharp. This is fine, if You
want a sharp look to the corner.
- create intermediate faces between the vertical and horizontal
faces.
The second strategy will soften the effect, but the long vertical face's surface normal
will *still* vary towards the normal of the next, almost-vertical, face.
In my modelling bag of tricks I have a solution that allows me to have my cake and eat it too:
perfectly flat-looking areas where I want them, soft corners where I want them, all with a
minimum of faces to keep object complexity down.
I just model the large, flat area in two parts, and make the edge part really skinny.
I can then leave all edges soft, so there won't be any discontinuities, yet the large
flat area will look perfectly flat.
|0
|0 | = large flat area (one set of faces)
|0
|0
|0 I = another set of faces, parallel to the large
I0 set. Should be very narrow, just running
____I2.5 along the Edge that connects to the horizontal
5 3.7 face.
In this case, both "|" and "I" faces have a surface normal of zero, and "_" faces have a surface normal of 5.
The "_" and "I" normals vary from 5 to zero as expected. The big difference, however, is that the "|"
edges have normals that vary FROM ZERO TO ZERO. Badabing, badaboom.
![owl-bar](Owl_bar.gif)
Pages made from the amigaguide version with the help of Mike's
RDAG2HTML
and the fabulous Dietmar's GoldED with the
WWW extension v2.